home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 August (Alt) / CHIP 2005-08.1.iso / program / guvenlik / syslinux-3.07.exe / com32 / lib / sys / opendev.c < prev    next >
Encoding:
C/C++ Source or Header  |  2004-11-23  |  2.1 KB  |  70 lines

  1. #ident "$Id: opendev.c,v 1.3 2004/11/23 23:43:02 hpa Exp $"
  2. /* ----------------------------------------------------------------------- *
  3.  *   
  4.  *   Copyright 2003-2004 H. Peter Anvin - All Rights Reserved
  5.  *
  6.  *   Permission is hereby granted, free of charge, to any person
  7.  *   obtaining a copy of this software and associated documentation
  8.  *   files (the "Software"), to deal in the Software without
  9.  *   restriction, including without limitation the rights to use,
  10.  *   copy, modify, merge, publish, distribute, sublicense, and/or
  11.  *   sell copies of the Software, and to permit persons to whom
  12.  *   the Software is furnished to do so, subject to the following
  13.  *   conditions:
  14.  *   
  15.  *   The above copyright notice and this permission notice shall
  16.  *   be included in all copies or substantial portions of the Software.
  17.  *   
  18.  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  19.  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  20.  *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  21.  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  22.  *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  23.  *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  24.  *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  25.  *   OTHER DEALINGS IN THE SOFTWARE.
  26.  *
  27.  * ----------------------------------------------------------------------- */
  28.  
  29. #include <errno.h>
  30. #include <com32.h>
  31. #include <string.h>
  32. #include "file.h"
  33.  
  34. /*
  35.  * opendev.c
  36.  *
  37.  * Open a special device
  38.  */
  39.  
  40. int opendev(const struct input_dev *idev, const struct output_dev *odev, int flags)
  41. {
  42.   int fd;
  43.   struct file_info *fp;
  44.   int okflags;
  45.  
  46.   okflags = (idev ? idev->fileflags : 0) | (odev ? odev->fileflags : 0);
  47.  
  48.   if ( !(flags & 3) || (flags & ~okflags) ) {
  49.     errno = EINVAL;
  50.     return -1;
  51.   }
  52.  
  53.   for ( fd = 0, fp = __file_info ; fd < NFILES ; fd++, fp++ )
  54.     if ( !fp->iop && !fp->oop )
  55.       break;
  56.  
  57.   if ( fd >= NFILES ) {
  58.     errno = EMFILE;
  59.     return -1;
  60.   }
  61.  
  62.   fp->iop         = idev ? idev : &dev_error_r;
  63.   fp->oop         = odev ? odev : &dev_error_w;
  64.   fp->i.offset    = 0;
  65.   fp->i.nbytes    = 0;
  66.   fp->i.datap     = fp->i.buf;
  67.  
  68.   return fd;
  69. }
  70.